package main

import (
	"fmt"
)

// 定义学生结构体
type Student struct {
	ID   int
	Name string
	Age  int
}

func main() {
	// 创建一些学生数据
	students := []Student{
		{ID: 1, Name: "张三", Age: 20},
		{ID: 2, Name: "李四", Age: 22},
		{ID: 3, Name: "王五", Age: 21},
	}

	// 主菜单循环
	for {
		fmt.Println("\n===== 学生信息管理系统 =====")
		fmt.Println("1. 添加学生")
		fmt.Println("2. 查询学生")
		fmt.Println("3. 显示所有学生")
		fmt.Println("4. 退出系统")
		fmt.Print("请选择操作(1-4): ")

		var choice int
		fmt.Scan(&choice)

		switch choice {
		case 1:
			// 添加学生
			var id int
			var name string
			var age int

			fmt.Print("请输入学生ID: ")
			fmt.Scan(&id)

			fmt.Print("请输入学生姓名: ")
			fmt.Scan(&name)

			fmt.Print("请输入学生年龄: ")
			fmt.Scan(&age)

			addStudent(&students, Student{ID: id, Name: name, Age: age})
			fmt.Println("学生信息添加成功！")

		case 2:
			// 查询学生信息
			var queryID int
			fmt.Print("请输入要查询的学生ID: ")
			fmt.Scan(&queryID)

			// 使用指针进行查询
			studentPtr := findStudentByID(&students, queryID)

			// 输出查询结果
			if studentPtr != nil {
				fmt.Printf("找到学生: ID=%d, 姓名=%s, 年龄=%d\n", studentPtr.ID, studentPtr.Name, studentPtr.Age)
			} else {
				fmt.Printf("未找到ID为%d的学生\n", queryID)
			}

		case 3:
			// 显示所有学生
			displayAllStudents(&students)

		case 4:
			// 退出系统
			fmt.Println("感谢使用，再见！")
			return

		default:
			fmt.Println("无效的选择，请重新输入！")
		}
	}
}

// 根据ID查找学生的函数（接收指向切片的指针）
func findStudentByID(students *[]Student, id int) *Student {
	for i := range *students {
		if (*students)[i].ID == id {
			return &(*students)[i]
		}
	}
	return nil
}

// 添加学生函数（接收指向切片的指针）
func addStudent(students *[]Student, student Student) {
	*students = append(*students, student)
}

// 显示所有学生信息
func displayAllStudents(students *[]Student) {
	fmt.Println("\n=== 所有学生信息 ===")
	for _, s := range *students {
		fmt.Printf("ID: %d, 姓名: %s, 年龄: %d\n", s.ID, s.Name, s.Age)
	}
}
